#include <windows.h>
#include <commctrl.h> // Dla ładniejszych kontrolek
#include <stdio.h>
#include <stdint.h> // To naprawi błąd uintptr_t
+++__
// --- Adresy GTA SA ---
typedef void(__cdecl* tCheatSpawnVehicle)(int vehicleID);
tCheatSpawnVehicle CheatSpawnVehicle = (tCheatSpawnVehicle)0x43A0B0;

// --- Zmienne ---
HWND hDlg = NULL;
int selectedID = 411; // Infernus
bool bGodMode = false;

// Dodaj to w sekcji zmiennych globalnych
HWND hCombo = NULL;

const char* vehicleNames[] = {
    "LANDSTAL", "BRAVURA", "BUFFALO", "LINERUN", "PEREN", "SENTINEL", "DUMPER", "FIRETRUK", "TRASH", "STRETCH", "MANANA",
    "INFERNUS", "VOODOO", "PONY", "MULE", "CHEETAH", "AMBULAN", "LEVIATHN", "MOONBEAM", "ESPERANT", "TAXI", "WASHING", "BOBCAT",
    "MRWHOOP", "BFINJECT", "HUNTER", "PREMIER", "ENFORCER", "SECURICA", "BANSHEE", "PREDATOR", "BUS", "RHINO", "BARRACKS",
    "HOTKNIFE", "ARTICT1", "PREVION", "COACH", "CABBIE", "STALLION", "RUMPO", "RCBANDIT", "ROMERO", "PACKER", "MONSTER",
    "ADMIRAL", "SQUALO", "SEASPAR", "PIZZABOY", "TRAM", "ARTICT2", "TURISMO", "SPEEDER", "REEFER", "TROPIC", "FLATBED", "YANKEE",
    "CADDY", "SOLAIR", "TOPFUN", "SKIMMER", "PCJ600", "FAGGIO", "FREEWAY", "RCBARON", "RCRAIDER", "GLENDALE", "OCEANIC",
    "SANCHEZ", "SPARROW", "PATRIOT", "QUAD", "COASTG", "DINGHY", "HERMES", "SABRE", "RUSTLER", "ZR350", "WALTON", "REGINA",
    "COMET", "BMX", "BURRITO", "CAMPER", "MARQUIS", "BAGGAGE", "DOZER", "MAVERICK", "VCNMAV", "RANCHER", "FBIRANCH", "VIRGO",
    "GREENWOO", "JETMAX", "HOTRING", "SANDKING", "BLISTAC", "POLMAV", "BOXVILLE", "BENSON", "MESA", "RCGOBLIN", "HOTRINA",
    "HOTRINB", "BLOODRA", "RNCHLURE", "SUPERGT", "ELEGANT", "JOURNEY", "BIKE", "MTBIKE", "BEAGLE", "CROPDUST", "STUNT", "PETRO",
    "RDTRAIN", "NEBULA", "MAJESTIC", "BUCCANEE", "SHAMAL", "HYDRA", "FCR900", "NRG500", "COPBIKE", "CEMENT", "TOWTRUCK",
    "FORTUNE", "CADRONA", "FBITRUCK", "WILLARD", "FORKLIFT", "TRACTOR", "COMBINE", "FELTZER", "REMINGTN", "SLAMVAN", "BLADE",
    "FREIGHT", "STREAK", "VORTEX", "VINCENT", "BULLET", "CLOVER", "SADLER", "FIRELA", "HUSTLER", "INTRUDER", "PRIMO", "CARGOBOB",
    "TAMPA", "SUNRISE", "MERIT", "UTILITY", "NEVADA", "YOSEMITE", "WINDSOR", "MONSTERA", "MONSTERB", "URANUS", "JESTER", "SULTAN",
    "STRATUM", "ELEGY", "RAINDANC", "RCTIGER", "FLASH", "TAHOMA", "SAVANNA", "BANDITO", "FREIFLAT", "STREAKC", "KART", "MOWER",
    "DUNERIDE", "SWEEPER", "BROADWAY", "TORNADO", "AT400", "DFT30", "HUNTLEY", "STAFFORD", "BF400", "NEWSVAN", "TUG", "PETROTR",
    "EMPEROR", "WAYFARER", "EUROS", "HOTDOG", "CLUB", "FREIBOX", "ARTICT3", "ANDROM", "DODO", "RCCAM", "LAUNCH", "COPCARLA",
    "COPCARSF", "COPCARVG", "COPCARRU", "PICADOR", "SWATVAN", "ALPHA", "PHOENIX", "GLENSHIT", "SADLSHIT", "BAGBOXA", "BAGBOXB",
    "TUGSTAIR", "BOXBURG", "FARMTR1", "UTILTR1"
};

// 1. Obsługa przycisków w oknie
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    switch (uMsg) {
        case WM_COMMAND:
            if (LOWORD(wParam) == 101) { // Przycisk SPAWN
                // W WindowProc, gdy naciśnięto przycisk 101 (SPAWN):
int index = SendMessage(hCombo, CB_GETCURSEL, 0, 0);
int vehicleID = 400 + index;
CheatSpawnVehicle(vehicleID);
                return 0;
            }
            if (LOWORD(wParam) == 102) { // Checkbox GOD MODE
                bGodMode = !bGodMode;
                return 0;
            }

            break;
        case WM_CLOSE:
            ShowWindow(hwnd, SW_HIDE); // Ukryj zamiast zamykać
            return 0;
    }
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

// 2. Tworzenie GUI (Białe okno z przyciskami)
void CreateTrainerGUI() {
    WNDCLASS wc = {0};
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = GetModuleHandle(NULL);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // Białe tło
    wc.lpszClassName = "SA_Trainer_Class";
    RegisterClass(&wc);

    hDlg = CreateWindowEx(WS_EX_TOPMOST, "SA_Trainer_Class", "GTA SA - ASI TRAINER", 
        WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 300, 200, NULL, NULL, wc.hInstance, NULL);

    // Przyciski i napisy
    CreateWindow("STATIC", "ID Pojazdu (400-611):", WS_VISIBLE | WS_CHILD, 10, 10, 150, 20, hDlg, NULL, NULL, NULL);
    
    HWND hEdit = CreateWindow("EDIT", "411", WS_VISIBLE | WS_CHILD | WS_BORDER, 10, 35, 50, 20, hDlg, (HMENU)201, NULL, NULL);
    
    CreateWindow("BUTTON", "SPAWNUJ", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 70, 32, 80, 25, hDlg, (HMENU)101, NULL, NULL);
    
    CreateWindow("BUTTON", "GOD MODE (Włącz/Wyłącz)", WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX, 10, 80, 180, 25, hDlg, (HMENU)102, NULL, NULL);

    // Wewnątrz CreateTrainerGUI():
hCombo = CreateWindow("COMBOBOX", "", 
    WS_VISIBLE | WS_CHILD | CBS_DROPDOWNLIST | WS_VSCROLL, 
    10, 35, 150, 200, hDlg, (HMENU)301, NULL, NULL);

// Wypełnianie listy nazwami
for (int i = 0; i < 212; i++) {
    SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM)vehicleNames[i]);
}
SendMessage(hCombo, CB_SETCURSEL, 122, 0); // Domyślnie NRG-500
}

// 3. Wątek logiki
DWORD WINAPI MenuThread(LPVOID lpParam) {
    while (*(uintptr_t*)0xB7CD98 == 0) Sleep(500);
    
    CreateTrainerGUI();

    MSG msg;
    while (true) {
        // Obsługa komunikatów okna (żeby nie było "Brak odpowiedzi")
        if (PeekMessage(&msg, hDlg, 0, 0, PM_REMOVE)) {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }

        // Czytanie ID z pola tekstowego (opcjonalnie)
        char buf[8];
        GetWindowText(GetDlgItem(hDlg, 201), buf, 8);
        selectedID = atoi(buf);

        // Cheat HP
        if (bGodMode) *(float*)0xB793E0 = 1000.0f;

        // INSERT pokazuje/chowa okno
        if (GetAsyncKeyState(VK_INSERT) & 1) {
            bool visible = IsWindowVisible(hDlg);
            ShowWindow(hDlg, visible ? SW_HIDE : SW_SHOW);
        }
        Sleep(10);
    }
    return 0;
}

extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
    if (fdwReason == DLL_PROCESS_ATTACH) {
        CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MenuThread, NULL, 0, NULL);
    }
    return TRUE;
}

